﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;

namespace Sale_and_manage
{
    public partial class frmAddOrder : DevComponents.DotNetBar.Metro.MetroForm
    {
        public frmAddOrder()
        {
            InitializeComponent();
        }
        
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtCash.Checked == false)
            {
                txtChange.Clear();
                txtPaid.Clear();
                txtPaid.Enabled = false;
            }
            else
            {
                txtPaid.Enabled = true;
                txtPaid.Text = txtSubTotal.Text;
                txtChange.Text = "0";
                txtPaid.Focus();
            }
        }

        private void btnNameSearch_Click(object sender, EventArgs e)
        {
            frmBookSearch.Type = 1;
            frmBookSearch frm = new frmBookSearch();
            frm.ShowDialog();
            frmBookSearch.Type = 0;
            frm.Dispose();
        }

        public void ReadBarcode()
        {
            switch (txtBarcode.Text.Length)
            { 
                case 7:
                    LoadOldBill();
                    break;
                case 9:
                    LoadCustomer();
                    break;
                case 10:
                    LoadBook();
                    break;
                case 13:
                    LoadBook();
                    break;
            }
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            dvgOrder.Rows.Clear();
            txtShipAddress.Clear();
            txtBarcode.Clear();
            txtSubTotal.Text = "0";
            txtDiscount.Text = "0";
            txtTotal.Text = "0";
            txtPaid.Text = "0";
            txtChange.Text = "0";
            rbtCash.Checked = true;
            lblCustomerID.Text = "";
            lblCustomerBonus.Text = "";
            lblCustomerName.Text = "";
            lblCustomerLevel.Text = "";
            GetOrderID();
            txtBarcode.Focus();
        }

        private void txtISBN_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void txtGuestCash_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
            else
            {
                if (Char.IsDigit(e.KeyChar) && txtPaid.Text == "0")
                {
                    txtPaid.Text = e.KeyChar.ToString();
                    txtPaid.SelectionStart = txtPaid.TextLength;
                    e.Handled = true;
                }
            }
        }

        private void txtPaid_Enter(object sender, EventArgs e)
        {
            txtPaid.SelectAll();
            txtDiscount.SelectionStart = txtDiscount.TextLength;
        }

        private void txtSubTotal_TextChanged(object sender, EventArgs e)
        {
            txtTotal.Text = (Int32.Parse(txtSubTotal.Text) * (100 - int.Parse(txtDiscount.Text)) / 100 + Convert.ToInt32(txtShipCost.Text)).ToString(); ;
        }

        private void txtTotal_TextChanged(object sender, EventArgs e)
        {
            if (txtPaid.Text == "")
            {
                txtPaid.Text = txtTotal.Text;
            }
            else
            {
                if ((Int32.Parse(txtPaid.Text) - Int32.Parse(txtTotal.Text)) >= 0)
                {
                    txtChange.Text = (Int32.Parse(txtPaid.Text) - Int32.Parse(txtTotal.Text)).ToString();
                }
                else
                    txtPaid.Text = txtTotal.Text;
            }
        }


        private void dvgOrder_UserAddedRow(object sender, DataGridViewRowEventArgs e)
        {
            txtSubTotal.Text = Gettotal().ToString();
        }

        private void txtPaid_TextChanged(object sender, EventArgs e)
        {
            if (rbtCash.Checked == true)
            {
                if (txtPaid.Text == "")
                {
                    txtChange.Text = "-" + txtTotal.Text;
                }
                else
                txtChange.Text = (Int32.Parse(txtPaid.Text) - Int32.Parse(txtTotal.Text)).ToString();
            }
        }

        private void dvgOrder_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
        {
            txtSubTotal.Text = Gettotal().ToString();
        }

        private void dvgOrder_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            txtSubTotal.Text = Gettotal().ToString();
        }

        private void txtDiscount_TextChanged(object sender, EventArgs e)
        {
            if (txtDiscount.Text == "")
            { 
                txtDiscount.Text = "0";
                txtTotal.Text = (Int32.Parse(txtSubTotal.Text) + Convert.ToInt32(txtShipCost.Text)).ToString(); ;
            }
            txtTotal.Text = (Int32.Parse(txtSubTotal.Text)*(100-int.Parse(txtDiscount.Text))/100+Convert.ToInt32(txtShipCost.Text)).ToString();
        }

        private void txtDiscount_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
            else
            {
                if (Char.IsDigit(e.KeyChar) && txtDiscount.Text == "0")
                {
                    txtDiscount.Text = e.KeyChar.ToString();
                    txtDiscount.SelectionStart = txtDiscount.TextLength;
                    e.Handled = true;
                }
            }
        }
        
        private void txtPaid_Leave(object sender, EventArgs e)
        {
            
            if (Int32.Parse(txtChange.Text)<0)
            {
                txtPaid.Focus();
                txtPaid.SelectAll();
                MessageBox.Show("Số tiền của khách đưa không được nhỏ hơn thành tiền");
                
            }
        }

        private void txtDiscount_Enter(object sender, EventArgs e)
        {
            txtDiscount.SelectionStart = txtDiscount.TextLength;
        }

        private void txtPaid_Click(object sender, EventArgs e)
        {
            txtPaid.SelectionStart = txtPaid.TextLength;
        }

        private void txtDiscount_Click(object sender, EventArgs e)
        {
            txtDiscount.SelectionStart = txtDiscount.TextLength;
        }

        private void frmAddOrder_Load(object sender, EventArgs e)
        {
            GetOrderID();
        }

        private void txtShipCost_TextChanged(object sender, EventArgs e)
        {
            if (txtShipCost.Text == "")
            {
                txtTotal.Text = (Convert.ToInt32(txtSubTotal.Text) * (100 - int.Parse(txtDiscount.Text)) / 100).ToString();
                txtShipCost.Text = "0";
            }
            txtTotal.Text = (Convert.ToInt32(txtSubTotal.Text) * (100 - int.Parse(txtDiscount.Text)) / 100 + Convert.ToInt32(txtShipCost)).ToString();
        }

        private void txtShipCost_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
            else
            {
                if (Char.IsDigit(e.KeyChar) && txtDiscount.Text == "0")
                {
                    e.Handled = false;
                    txtShipCost.Text = e.KeyChar.ToString();
                    txtShipCost.SelectionStart = txtShipCost.TextLength;
                    e.Handled = true;
                }
            }
        }

        private void txtShipCost_Click(object sender, EventArgs e)
        {
            txtShipCost.SelectionStart = txtShipCost.TextLength;
        }

        private void txtShipCost_Enter(object sender, EventArgs e)
        {
            txtShipCost.SelectionStart = txtShipCost.TextLength;
        }

        public void GetOrderID()
        {
            //kết nối cơ ở dữ liệu và sinh orderid tiếp theo ghi vèo lblOrderID
        }

        public Int32 Gettotal()
        {
            //tính tổng từ dvgOrder đưa vào tmp
            Int32 tmp = 0;
            return tmp;
        }

        private void rbtBonus_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtBonus.Checked == true)
            {
                /*
                 * hỏi lại cơ cấu điểm vs sếp duyên
                if (Int32.Parse(lblCustomerBonus.Text)<=Int32.Parse(txtTotal.Text))
                {
                    MessageBox.Show("Bạn không đủ điểm để thực hiện giao dịch này");
                    rbtCash.Checked = true;
                }
                 */
            }
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            //kiểm tra các kiểu dữ liệu đầy đủ và thêm các trường orderid guestid date address subtotal discount shipcost 
            GetOrderID();
        }

        private void btnPrint_Click(object sender, EventArgs e)
        {
            if (txtShipAddress.Text == "")
            {
                MessageBox.Show("Bạn phải nhập địa chỉ chuyển hàng trước");
                txtShipAddress.Focus();
            }
            else
            {
                //goi ham print
                //sau khi in chạy hàm save
                btnSave_Click(null, null);
            }
        }

        public static Boolean LoadBook2(Int32 ISBN, string Title, Int32 price)
        {
            //Kiểm tra ISBN đã có trong dvg hay chưa, nếu rồi thì tăng copy lên 1 đơn vị và tính lại total
            //nếu chưa thì add rows vào trong dvgOrder với 5 trường Autonumber, ISBN, Title,Price<hide>,Copy,Total
            //đã add thì trả true, lỗi add thì trả false
            return true;
        }

        protected override bool ProcessDialogKey(Keys keyData)
        {
            switch (keyData)
            {
                case Keys.F1:
                    {
                        btnNameSearch_Click(null, null);
                        break;
                    }
                case Keys.F2:
                    {
                        btnSave_Click(null, null);
                        break;
                    }
                case Keys.F3:
                    {
                        btnPrint_Click(null, null);
                        break;
                    }
                case Keys.F4:
                    {
                        btnClear_Click(null, null);
                        break;
                    }
                case Keys.Enter:
                    {
                        Validate vld = new Validate();
                        if (vld.Barcode(txtBarcode.Text))
                        {
                            ReadBarcode();
                        }
                        else
                        {
                            //tìm cách báo lỗi ở chổ này
                            txtBarcode.Clear();
                            txtBarcode.Focus();
                        }
                        break;
                    }
            }

            return base.ProcessDialogKey(keyData);
        }

        public void LoadOldBill()
        {
            //kiem tra OrderID neu da van chuyen hoac khong ton tai thi thong bao OrderID khong hop le
            //nguoc lai thi
            //Load lai Order co barcode nhu txtBarcode va do database vao trong dvgOrder
            //Tinh toan lai Subtotal total
            //focus txtBarcode
        }

        public void LoadCustomer()
        {
            //nếu CustomerID đã được hiển thị tại lblCustomerID thì messengerbox hỏi người dùng muốn thay thế hay không
            //Tim kiem CustomerID, khong tim thay thi bao lai co muon them customer vao dnah sach tam thoi hay khong
            ////them customer vao database
            //load thong tin khach hang
            //dien thong tin cua khach hang vao cac lbl tuong ung, uu tin dia chi nha khach hang
            ////neu laf khach hang trong danh sach tam thi focus vao txtShipAddress
        }

        public void LoadBook()
        {
            //Select  ISBN, Title, Pricetrong book
            //Kiểm tra ISBN đã có trong dvg hay chưa, nếu rồi thì tăng copy lên 1 đơn vị và tính lại total
            //nếu chưa thì add rows vào trong dvgOrder với 5 trường Autonumber, ISBN, Title,Price<hide>,Copy,Total
            //clear và focus lại txtBarcode
        }

        
    }
}